package com.example.sxt_practise.thread.ThreadEightLock;

import java.util.concurrent.TimeUnit;

/**
 * 一个静态的同步方法,一个普通的同步方法,一个对象,先打印谁?打电话
 * 一个静态的同步方法,一个普通的同步方法,两个对象,先打印谁?打电话 call
 * @author gaofeng
 * @date 2022年06月04日 10:10
 */
public class Test4 {
    public static void main(String[] args) {
        // 两个调用者,两把锁
        Phone4 phone1= new Phone4() ;
        Phone2 phone2 = new Phone2() ;

        // 两个线程，谁先拿到锁谁先执行
        new Thread(Phone3::sendMsg, "A").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(phone2::call,"B").start();
//        new Thread(phone2::sayHello, "C").start();
    }
}


class Phone4{
    /**
     * synchronized锁的是方法的调用者
     * 两个方法是同一个锁,谁先拿到谁执行
     *
     * static 锁的是Phone3
     */
    public static synchronized void sendMsg() {
        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("发送短信！");
    }

    public synchronized void call() {
        System.out.println("打电话！");
    }
}
